---
title: lint-staged
description: Esegui automaticamente Ultracite sui file Git in stage con lint-staged
---

Ultracite si integra perfettamente con [lint-staged](https://github.com/okonet/lint-staged) per formattare e lintare automaticamente il codice prima di ogni commit. Questo garantisce che solo codice pulito e formattato correttamente entri nel tuo repository.

## What is lint-staged?

lint-staged è uno strumento che esegue linter e formatter sui file Git in stage. È particolarmente utile perché:

- Elabora solo i file che vengono effettivamente commitati
- Impedisce che codice mal formattato entri nel tuo repository
- Viene eseguito rapidamente poiché controlla soltanto i file modificati
- Si integra perfettamente con i Git hook

## How Ultracite Uses lint-staged

Quando esegui `npx ultracite init`, se selezioni l'opzione lint-staged, Ultracite automaticamente:

1. **Installa lint-staged** come dipendenza di sviluppo
2. **Crea o aggiorna** la tua configurazione di lint-staged
3. **Configura il formatter** per essere eseguito sui tipi di file rilevanti

La configurazione predefinita esegue `npx ultracite fix` su questi tipi di file:
- File JavaScript/TypeScript (`.js`, `.jsx`, `.ts`, `.tsx`)
- File JSON (`.json`, `.jsonc`)
- File CSS (`.css`, `.scss`)
- File Markdown (`.md`, `.mdx`)

## Supported Configuration Formats

L'integrazione di Ultracite con lint-staged supporta tutti i formati di configurazione standard di lint-staged:

### package.json

```json title="package.json"
{
  "lint-staged": {
    "*.{js,jsx,ts,tsx,json,jsonc,css,scss,md,mdx}": ["npx ultracite fix"]
  }
}
```

### .lintstagedrc.json

```json title=".lintstagedrc.json"
{
  "*.{js,jsx,ts,tsx,json,jsonc,css,scss,md,mdx}": ["npx ultracite fix"]
}
```

### .lintstagedrc.js (CommonJS)

```javascript title=".lintstagedrc.js"
module.exports = {
  "*.{js,jsx,ts,tsx,json,jsonc,css,scss,md,mdx}": ["npx ultracite fix"]
};
```

### .lintstagedrc.mjs (ES Modules)

```javascript title=".lintstagedrc.mjs"
export default {
  "*.{js,jsx,ts,tsx,json,jsonc,css,scss,md,mdx}": ["npx ultracite fix"]
};
```

### .lintstagedrc.yaml

```yaml title=".lintstagedrc.yaml"
"*.{js,jsx,ts,tsx,json,jsonc,css,scss,md,mdx}":
  - 'npx ultracite fix'
```

## Smart Configuration Merging

Se hai già una configurazione di lint-staged, Ultracite:

- **Rileva** il formato della tua configurazione esistente
- **Unisce** le regole di Ultracite con le tue regole esistenti
- **Preserva** le tue configurazioni personalizzate
- **Aggiorna** il file sul posto

Questo significa che puoi eseguire in sicurezza `npx ultracite init` anche se hai già impostato lint-staged.

## How It Works

1. **Pre-commit Hook**: lint-staged viene eseguito prima di ogni commit tramite Husky
2. **Rilevamento dei file**: vengono processati solo i file in stage che corrispondono ai pattern
3. **Comando di formattazione**: `npx ultracite fix` viene eseguito su ogni file corrispondente
4. **Auto-fixing**: Biome corregge automaticamente i problemi dove possibile
5. **Rimessa in stage**: i file corretti vengono automaticamente rimessi in staging per il commit

## Manual Configuration

Se hai bisogno di personalizzare la tua configurazione di lint-staged, puoi modificare la configurazione dopo l'inizializzazione:

```json title="package.json"
{
  "lint-staged": {
    "*.{js,jsx,ts,tsx}": ["npx ultracite fix", "npm run test:unit"],
    "*.{json,jsonc}": ["npx ultracite fix"],
    "*.{css,scss}": ["npx ultracite fix", "npm run test:styles"],
    "*.{md,mdx}": ["npx ultracite fix"]
  }
}
```

## Commands Integration

L'integrazione con lint-staged funziona con la struttura dei comandi di Ultracite:

- **`npx ultracite fix`**: Esegue Biome con auto-fix (usato da lint-staged)
- **`npx ultracite check`**: Esegue Biome senza auto-fix (per controlli CI/manuali)

## Troubleshooting

### Configuration Not Found
Se visualizzi errori relativi alla mancanza della configurazione di lint-staged:

```bash
npx ultracite init  # Re-run initialization
```

### ESM/CommonJS Issues
Ultracite rileva automaticamente il tipo di progetto e crea il formato di configurazione appropriato:

- **Progetti ESM** (con `"type": "module"` in package.json) ottengono configurazioni `.mjs`
- **Progetti CommonJS** ottengono configurazioni `.cjs`
- **Fallback**: Crea `.lintstagedrc.json` se il rilevamento del modulo fallisce

### Existing Configuration Conflicts
Se hai configurazioni esistenti complesse, potrebbe essere necessario unire manualmente:

1. Esegui il backup della tua configurazione esistente di lint-staged
2. Esegui `npx ultracite init`
3. Unisci manualmente eventuali regole personalizzate che devi preservare

## Best Practices

1. **Mantienilo veloce**: Esegui in lint-staged solo i controlli essenziali
2. **Usa pattern specifici**: Mira solo ai file che necessitano elaborazione
3. **Combina con CI**: Usa lint-staged per controlli rapidi locali, linting completo in CI
4. **Testa la configurazione**: Fai un commit di prova per assicurarti che tutto funzioni

## Related

- [Integrazione Husky](/integration/husky) - Configurazione dei Git hook
- [Configurazione](/configuration) - Opzioni di configurazione di Biome
- [Installazione](/setup) - Configurazione iniziale del progetto